﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed

#pragma once

#include "GcmpApplicationInterface.h"

namespace gcmp
{

/// \brief  主程序配置
class GCMP_APPLICATION_INTERFACE_EXPORT IApplicationConfig
{
public:
    /// \brief 析构函数
    virtual ~IApplicationConfig();

    /// \brief 获取程序图标路径
    ///
    /// \return 程序图标路径
    /// \see bool SetApplicationIconPath(const std::wstring& icon)
    virtual std::wstring GetApplicationIconPath() const = 0;

    /// \brief 设置程序图标路径
    ///
    /// 该程序图标指的是任务栏上的图标。图标路径可以是相对于可执行程序的相对路径或绝对路径
    /// \param icon 程序图标路径
    /// \return 目前始终返回true
    virtual bool SetApplicationIconPath(const std::wstring& icon) = 0;

    /// \brief 获取类别配置文件夹名
    ///
    /// \return 类别配置文件夹名
    /// \see bool SetCategoryAndStyleConfigDirectory(const std::wstring& directoryName)
    virtual std::wstring GetCategoryAndStyleConfigDirectory() const = 0;

    /// \brief 设置类别配置文件夹名
    ///
    /// 会从当前可执行程序所在目录下的类别配置文件夹下读取所有相关的类别设置
    /// \param directoryName 类别配置文件夹名
    /// \return 成功设置返回true
    virtual bool SetCategoryAndStyleConfigDirectory(const std::wstring& directoryName) = 0;

    /// \brief 设置程序线样式开关路径
    ///
    /// 程序线样式开关目录可以是相对于可执行程序的相对目录或绝对目录
    /// 程序线样式开关配置文件为LineStyleSwitchesConfig.xml，此文件gcmp已有，无需用户创建仅需将该文件放置在相应目录下即可
    /// \param lineStyleSwitchesConfigDirectory 程序线样式开关目录,默认为可执行程序所在目录
    /// \return 设置成功返回true,否则返回false
    virtual bool SetLineStyleSwitchesConfigDirectory(const std::wstring& lineStyleSwitchesConfigDirectory) = 0;

    /// \brief 获取程序线样式开关目录
    ///
    /// \return 程序线样式开关目录
    virtual std::wstring GetLineStyleSwitchesConfigDirectory() const = 0;

    /// \brief 获取程序是否使用族实例可移动夹点开关
    ///
    /// 如果没有使用SetUseInstanceMovablePoints设值，默认值为false。
    /// \return 族实例可移动夹点开关的值
    virtual bool GetUseInstanceMovablePoints() const = 0;

    /// \brief 设置程序族是否使用族实例可移动夹点开关
    ///
    /// 如果打开族实例可移动夹点开关，鼠标选择有可移动夹点的族实例可以看见相应的夹点；
    /// 如果关闭族实例可移动夹点开关，鼠标选择有可移动夹点的族实例不生成相应的可移动夹点。
    /// \param switchValue true为打开族实例可移动夹点开关， false为关闭族实例可移动夹点开关。
    /// \return 设置成功返回true,否则返回false
    virtual bool SetUseInstanceMovablePoints(bool switchValue) = 0;
};

}